package cn.edu.niit.server.web.rest;

import cn.edu.niit.server.service.AiFaceService;
import cn.edu.niit.server.service.ImageTools;
import cn.edu.niit.server.service.dto.FaceItem;
import cn.edu.niit.server.service.dto.FileUploadResult;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/api")
public class FileUploadResource {

    @Value("${file.diskpath}")
    String diskPath;

    @Value("${file.fileurl}")
    String fileUrl;

    private final AiFaceService aiFaceService;

    public FileUploadResource(AiFaceService aiFaceService) {
        this.aiFaceService = aiFaceService;
    }

    @PostMapping("/file-upload")
    public ResponseEntity fileUpload(MultipartFile file) {
        //最终目标：将file写入到准备好的文件夹中
        //1、文件重命名
        //1.1生成一个不会重复的文件名
        String serverFileName = UUID.randomUUID().toString();
        //1.2读取原始文件名，解析后缀名
        String originFileName = file.getOriginalFilename();
        //1.3原始文件名最后一个.符号后的字符为后缀名
        String extName = originFileName.substring(originFileName.lastIndexOf("."));
        //1.4将唯一文件名+后缀名得到完整的服务器上的文件名
        serverFileName = serverFileName + extName;

        //2、写文件
        //2.1定义文件在服务器磁盘上的完整路径
        String serverFileDiskpath = diskPath + serverFileName;
        //2.2创建一个空白文件
        File serverFile = new File(serverFileDiskpath);
        //2.3将收到的文件写入空白文件
        try {
            file.transferTo(serverFile);
            //请求百度的服务，获得人脸检测结果。
            String imageString = ImageTools.imageToBase64Str(serverFile);
            List<FaceItem> faceItemList = this.aiFaceService.detectImageBase64(imageString, "10");
            //3、组装保存后的文件访问路径
            String filePath = fileUrl + "/" + serverFileName;

            FileUploadResult result = new FileUploadResult();
            result.setFileUrl(filePath);
            result.setFaceList(faceItemList);

            return ResponseEntity.ok(result);
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseEntity.badRequest().body("文件传输失败");
        }
    }
}
